package com.csw.scala

object Demo06Class {
  def main(args: Array[String]): Unit = {
    val student = new Student("170318148","csw",22)

    println(student._age)
    println(student)

    val student1 = new Student("001", "李四", 24, "男")
    println(student1)

    val i = TextObject.fun("100")
    println(i)

    /**
      *  类中的普通方法需要通过类的对象才能调用
      *  object中的方法可以直接调用
      */
  }

  /**
    *
    * 在类中可以定义属性，方法，构造函数
    */
  class Student(id:String, name:String, age:Int){
    println("默认构造函数")
    //定义属性并赋值
    val _id: String = id
    val _name: String = name
    val _age: Int = age

    //下划线是一个占位符，起到占用位置的作用
    var _gender: String = _
    /**
      * 重载构造函数
      * 在重载构造函数第一行需要显示调用默认构造函数
      */
    def this(id:String, name:String, age:Int, gender:String){
      this(id,name,age)
      println("重载构造函数")

      this._gender = gender
    }
    /**
      * override重写父类的方法
      * 应该为  override def toString：String={
      * return s"Student($_id, $_name, $_age)"}
      * 没有的都被省略了
      */
    override def toString =
    //默认最后一行作为返回值，所有return可以省略
      s"Student(${_id}, ${_name}, ${_age},${_gender})"
  }
  /**
    * 定义一个单例模式的对象
    * 对象中的方法可以直接调用
    *
    */

  object TextObject {
    def fun(s: String): Int = {
      s.toInt
    }
}
}
